package com.p04.study;

/**
 * 超级数组
 */
public class SuperArray {

    /**
     * 用来存储数据的数组（ Object[] 可以存放任意数据类型）
     */
    private Object[] objects;
    /**
     * 用来记录当前数组的长度
     */
    private int size;
    /**
     * 数组的默认长度
     */
    private final int ARRAYLENTH=3;

    /**
     * 创建对象时 初始化Object数组的长度 默认值5
     */
    public SuperArray() {
        objects = new Object[ARRAYLENTH];
    }

    /**
     * 获取数组的长度
     * @return
     */
    public int getSize() {
        return size;
    }

    /**
     * 添加数据(任意参数)
     * @param object 任意参数--> 多态的参数
     */
    public void add(Object object){
        //往数组中存值
        /**
         * objects[0]=....
         * objects[1]=....
         * objects[2]=....
         */
        objects[size++]=object; //size
        if(size>=objects.length){
          //对原数组对象进行扩充
          Object[] newObjects = new Object[objects.length*2];
          //复制原来的数组中的数据到新的数组中
            System.arraycopy(objects,0,newObjects,0,objects.length);
            //把新的数组的地址赋值给原来的数组的变量(***)
            objects = newObjects;
        }




    }

    /**
     * 根据下标获取数组中的值
     * @param index  下标
     * @return  获得的值
     */
    public Object get(int index){
        return objects[index];
    }

    /**
     * 删除的方法
     * @param index 删除的下标
     * @return
     */
    public Boolean remove(int index){
        //如果传入的index 小于size 则删除成功
        //不满足则 则删除失败
       if(index<size){
         //把要删除的那个元素的后面的数据进行复制，size减一
           /**
            *  1,2,3,4,5
            *  1: 4   5(就是素组的长度)-1-index 0  4
            *  2: 3   5-1-index 1  3
            *  3: 2   5-1-index 2  2
            *  4: 1   5-1-index 3  1
            *  5: 0   5-1-index 4  0
            */
           System.arraycopy(objects,index+1,objects,index,size-1-index);
           //删除以后 记得 size 要减1
           size--;
           return true;
       }else{

           return false;
       }
    }
}
